ARFoundation之路-ARSession & ARSessionOrigin | 您所在的位置:网站首页 › camera ar › ARFoundation之路-ARSession & ARSessionOrigin |
版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。 在之前的工程里,我们首先在Hierarchy窗口中添加了ARSession和ARSessionOrigin两个对象,这两个对象构建起了AR应用的最基础的框架,所有其他工作都在这基础之上展开,那么,这两个对象在整个AR应用中起什么作用? ARSession对象主要包括两个组件,一个就是ARSession,管理Session,另一个是AR Input Manager,管理输入相关信息,如下图所示。AR中Session(中文翻译为会话)用来管理 AR 应用的状态、处理 AR 应用生命周期,是 AR API的主要入口,由其控制在目标平台上启用或禁用AR。在Unity 对应的生命周期方法中需要处理 Session 的生命周期,这样 AR 应用会根据需要开始或暂停相机帧的采集,初始化或释放相关的资源。AR场景必须包括ARSession组件,但ARSession可以挂在任何场景对象上,一般为便于管理,我们将其挂载在ARSession对象上。 AR Input Manager组件是启用世界跟踪所必需的组件,不启用此组件,Tracked Pose Driver(跟踪姿态驱动)将无法获取设备的姿态。 特别需要注意的是,在任何一个AR应用中,有且仅允许有一个Session,因此Unity将Session设成一个全局组件,因此如果场景中有多个ARSession,那这些ARSession组件都将尝试管理同一个Session。同样,AR Input Manager组件也只能有且仅有一个。 移动手机平台设备各类繁多,不是每一个平台都支持ARFoundation,因此我们需要一些Session状态来表示平台的可用性,以便根据Session状态进行下步操作或者在设备不支持AR时可以提供替代的应用方案。 要确定当前的Session状态(例如设备是否支持、是否正在安装AR软件以及Session是否工作),可以使用ARSessionState枚举类型,还可以在Session状态更改时订阅ARSession.stateChanged事件。ARSessionState枚举包括以下类型: ARSessionState说明CheckingAvailability应用正在检测设备可用性。InstallingAR软件正在安装(这里指手机端的ARCore或者ARKit)。NeedsInstall设备支持AR,但需要安装相应软件(这里指手机端的ARCore或者ARKit)。None应用还未完成初始化,设备可用性未知。ReadyAR可用并已经准备好。SessionInitializingAR Session正在初始化,通常指AR在设备上可用,但AR应用目前还未收集到足够的环境信息。SessionTrackingSession正常运行并且处于正常跟踪状态。Unsupported设备不支持AR。因此, 我们可以通过以下代码来检测AR应用当前状态: if (ARSession.state == ARSessionState.None || ARSession.state == ARSessionState.CheckingAvailability) { //设备状态未知 } if (ARSession.state == ARSessionState.Unsupported) { // 设备不支持AR } else { // 设备支持AR } (二)ARSessionOriginAR Session Origin对象默认有一个Transform组件和一个AR Session Origin组件,如下图所示。
AR Session Origin还接受一个摄像机参数,这个摄像机就是AR摄像机,AR摄像机与用户设备摄像机通过Tracked Pose Driver组件可以进行对齐,同时与AR session space对齐,这样才可以以正确的视角在特定位置渲染虚拟物体。 为更方便的渲染虚拟物体,AR Session Origin还允许缩放虚拟物体和相对摄像机的偏移。如果要使用缩放或偏移功能,则摄像机必须要是AR Session Origin的子对象(默认就是子对象),摄像机由Session驱动,因此设置AR Session Origin的缩放与偏移,则摄像机和检测到的可跟踪对象也一起缩放与偏移。 要将缩放应用于AR Session Origin,只需设置其Transform 中的Scale值,将偏移应用于AR Session Origin,只需设置其Transform 中的Position值,这里设置的缩放与偏移会影响所有虚拟物体的渲染,较大的Scale值将会使AR虚拟内容显示得更小,例如,10倍的Scale将使虚拟对象显示小10倍,而0.1将使虚拟对象显示大10倍。在需要整体缩放虚拟物体时可以考虑调整该值。 AR Session Origin对象还有一个子对象AR Camera,AR Camera默认挂载Tracked Pose Driver 、AR Camera Manager、AR Camera Background,如下图所示。 AR Camera Manage组件负责处理控制摄像机的一些细节参数,如表示纹理和控制光照估计模式。其有两个参数Focus Mode 和 Light Estimation Mode,相关意义如下表所示: 参数选项Focus Mode摄像机对焦模式,可以为“Auto”或“Fixed”,Auto即允许摄像机自动对焦,一般我们会选择此模式,Fixed即为固定焦距,固定焦距不会改变设备摄像机焦距,因此,与被拍摄物体距离不合适时就是出现模糊的现象。Light Estimation Mode光照估计模式,可以为“Disable”或“Ambient Intesity”,选择Ambient Intesity将启用光照估计功能,ARFoundation将根据真实世界中的光照信息来评估当前环境中的光照强度、光照颜色、光照方向等信息,这个评估每一帧都要进行,所以如果不需要光照估计功能时选择Disable可以节约资源。在AR中,我们以真实环境做为背景,因此我们需要将摄像机捕捉到的图像渲染成背景,使用AR Camera Background组件就可以轻松实现这个功能。AR Camera Background组件还有两个参数Use Custom Material和Use Custom Render Asset ,这两个参数均为可选项。Use Custom Material、Use Custom Material一般情况下我们都不用勾选,这个默认会由Unity根据平台来进行背景渲染,但如果勾选,我们就要提供背景渲染的材质、Shader,利用这两个选项可以实现一些高级功能,如背景模糊、描边等。 如果在场景中只有一个AR Session Origin,我们可以简单的为其添加一个AR Camera Background就可以将摄像机的图像渲染成背景,但如果有多个AR Session Origin,有多个摄像机(例如在不同的缩放尺度上渲染场景),那么这时我们就要为每一个AR Session Origin、每一个摄像机指定一个AR Camera Background组件并进行相应设置。 ARSession与ARSessionOrigin负责AR应用整个生命周期管理、AR摄像机头处理及背景渲染相关工作,这些工作是每一个AR应用都需要的,但这些工作需要与设备硬件交互,通常也会非常繁杂。这两个功能模块对此进行了良好封装处理,用户不用再担心具体的细节,这大大的简化了AR应用开发的难度。 参考文献About AR Foundation About AR Foundation |
CopyRight 2018-2019 实验室设备网 版权所有 |